package com.lx.dao;

import com.lx.bean.Express;
import com.lx.exception.CodeExitException;

import java.util.List;
import java.util.Map;

/**
 * @ClassName: ExpressDap
 * @Description:
 * @Date Created in  2021-07-07 9:42
 * @Modified By:
 * @Author: 零巽
 */
public interface ExpressDao {
    /**
     * 用于查询全部快递，总数+新增   待取件+新增
     *
     * @return [{size:总数,increment:新增},{size:总数,increment:新增}]
     */
    List<Map<String, Integer>> console();

    /**
     * 用于查询所有快递
     *
     * @param limit    是否开启分页，true表示是，false表示否（查询所有）
     * @param start    查询的起始索引
     * @param pageSize 分页的页容量
     * @return 查询到的快递集合
     */
    List<Express> findAll(boolean limit, int start, int pageSize);

    /**
     * 根据快递单号查询快递
     *
     * @param Number 快递单号
     * @return 查询到的快递信息，不存在时返回null
     */
    Express findByNumber(String Number);

    /**
     * 根据取件码查询快递
     *
     * @param code 取件码
     * @return 查询到的快递信息，不存在时返回null
     */
    Express findByCode(String code);

    /**
     * 根据用户手机号码查询快递
     *
     * @param UserPhone 手机号码
     * @return 查询到的快递信息，不存在时返回null
     */
    List<Express> findByUserPhone(String UserPhone);

    /**
     * 根据录入人手机号码查询快递
     *
     * @param SysPhone 手机号码
     * @return 查询到的快递信息，不存在时返回null
     */
    List<Express> findBySysPhone(String SysPhone);

    /**
     * 快递录入
     *
     * @param express 需要录入的快递
     * @return true表示录入成功，false表示失败
     */
    boolean add(Express express) throws CodeExitException;

    /**
     * 快递修改
     *
     * @param id      需要修改的快递id
     * @param express 修改后的快递信息
     * @return true表示录入成功，false表示失败
     */
    boolean update(int id, Express express);

    /**
     * 通过id删除快递
     *
     * @param id 需要删除的快递id
     * @return true表示删除成功，false表示失败
     */
    boolean deleteById(int id);

    /**
     * 通过取件码更改快递状态（取件）
     *
     * @param code 快递单号
     * @return true 表示更改成功，false表示失败
     */
    boolean changeStatusByCode(String code);

    /**
     * 获取总排行
     * @return 【用户电话集合，用户数组集合】（降序排序）
     */
    List[] getTotalBoard();

    /**
     * 月排行
     * @return 【用户电话集合，用户数组集合】（降序排序）
     */
    List[] getMonthBoard();

    /**
     * 年排行
     * @return 【用户电话集合，用户数组集合】（降序排序）
     */
    List[] getYearBoard();
}
